package com.baidu.navigationdemo.recyclerView

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.baidu.navigationdemo.R
import com.baidu.navigationdemo.databinding.NewsItemLayoutBinding
import com.google.android.material.tabs.TabLayout

/**
 自定义Adapter时，必须制定当前Adapter的ViewHolder
 这个ViewHolder必须继承于RecyclerView.ViewHolder
 */
class MyAdapter: RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
    private var mNewsList:List<News> = listOf()

    //自定义ViewHolder的子类
    //用于管理当前这个RecyclerView显示的每一个Item的View
    /*
    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        //数据如何显示
        //事件如何处理
        fun bind(news: News){
            //找到每一个控件，把数据显示上去
            val imageView = itemView.findViewById<ImageView>(R.id.headImageView)
            val tvName = itemView.findViewById<TextView>(R.id.tvName)
            val tvDetail = itemView.findViewById<TextView>(R.id.tvDetail)
            imageView.setImageResource(news.id)
            tvName.text = news.title
            tvDetail.text = news.content
        }
    }
    */

    class MyViewHolder(val binding:NewsItemLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
        //数据如何显示
        //事件如何处理
        fun bind(news: News){
            //找到每一个控件，把数据显示上去
            binding.headImageView.setImageResource(news.id)
            binding.tvName.text = news.title
            binding.tvDetail.text = news.content
        }
    }

    //创建自己定义的ViewHolder
    //这个Item如何布局 1.xml  2.binding
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        val binding = NewsItemLayoutBinding.inflate(layoutInflater, parent, false)
        return MyViewHolder(binding)
    }

    //获取当前RecyclerView中Item的数量
    //来自于数据源
    override fun getItemCount(): Int {
        return mNewsList.size
    }

    //将position对应的数据绑定(显示)到ViewHolder上
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        //从数据源取出当前这个item对应的数据
        val news = mNewsList[position]
        holder.bind(news)
    }

    //提供给外部设置数据源
    fun setData(datas: List<News>){
        //保存外部传递过来的数据
        mNewsList = datas
        //通知RecyclerView数据源发生了变化
        //全局刷新 （会刷新这个RecyclerView）
        notifyDataSetChanged()
    }
}























